package qiongqi

import (
	"cdam/qiongqi/expression"
	"encoding/json"
)

// 穷齐表达式接口； 内部主要实现两个方法
type Execer interface {
	ExecReturnBool(exp, params []byte) (bool, error)

	ExecReturnStringSlice(exp, params []byte) ([]string, error)
}

// 定义穷齐 表达式编译器
func QiongqiExecer() Execer {
	return &execer{}
}

// 穷齐表达式的具体实现 类似java的具体实现类
type execer struct {
}

func (e *execer) ExecReturnStringSlice(exp, params []byte) ([]string, error) {
	var m map[string]interface{}
	err := json.Unmarshal(params, &m)
	if err != nil {
		return nil, err
	}
	return expression.ExecParamStringSlice(string(exp), m)
}

func (*execer) ExecReturnBool(exp, params []byte) (bool, error) {
	var m map[string]interface{}
	// 具体参数  exp 具体表达式
	err := json.Unmarshal(params, &m)
	if err != nil {
		return false, err
	}
	return expression.ExecParamBool(string(exp), m)
}
